[iOS 8] SpriteKit でミニゲームをつくる #9 トグルボタンみたいなスプライト
トグルボタンみたいなスプライト
ボタンみたいなスプライトを作ったので、ついでにトグルボタンみたいなスプライトも作ってみました。
ゲームアプリを作っているので、サウンドON/OFFボタンなどで使えそうかな、と思います。
で、作ったクラスがこちら。
import SpriteKit class SpriteToggleButton: SpriteButton { var onUpTexture:SKTexture! var onDownTexture:SKTexture! var offUpTexture:SKTexture! var offDownTexture:SKTexture! var on:Bool = true { didSet { changeUpTexture() } } init(button:SKSpriteNode!, atlas:SKTextureAtlas!, onUpTexture:String!, onDownTexture:String!, offUpTexture:String!, offDownTexture:String!, block: dispatch_block_t!) { super.init(button: button, atlas: atlas, upTexture: onUpTexture, downTexture: onDownTexture, block) self.onUpTexture = self.upTexture self.onDownTexture = self.downTexture self.offUpTexture = atlas.textureNamed(offUpTexture) self.offDownTexture = atlas.textureNamed(offDownTexture) button.texture = self.onUpTexture } deinit { onUpTexture = nil onDownTexture = nil offUpTexture = nil offDownTexture = nil } override func buttonDidTouch(p: CGPoint) { if button.containsPoint(p) { on = !on if (buttonDidTouchBlock != nil) { buttonDidTouchBlock() } } changeUpTexture() } override func changeUpTexture() { if (on){ button.texture = onUpTexture } else { button.texture = offUpTexture } } override func changeDownTexture() { if (on){ button.texture = onDownTexture } else { button.texture = offDownTexture } } }
前回作った「SpriteButton」クラスを継承して、テクスチャーを変更するところで、ON/OFF分岐させてるだけです。
使い方はこんな感じ。
import SpriteKit class GameScene: SKScene { var soundSpriteToggleButton:SpriteToggleButton! override func didMoveToView(view: SKView) { // レイヤーを取得する。 let consoleLayer = childNodeWithName("consoleLayer") // テクスチャアトラスを取得する。 let assetsAtlas = SKTextureAtlas(named: "assets") // スプライトを取得する。 let soundButton = consoleLayer?.childNodeWithName("giveUpButton") as SKSpriteNode! // ボタンを生成する。 soundSpriteToggleButton = SpriteToggleButton( button: soundButton, atlas: assetsAtlas, onUpTexture: "btn_sound_on_up", onDownTexture: "btn_sound_on_down", offUpTexture: "btn_sound_off_up", offDownTexture: "btn_sound_off_down", block: soundButtonDidTouch ) } func soundButtonDidTouch() { println("on:\(soundSpriteToggleButton.on)") } override func willMoveFromView(view: SKView) { super.willMoveFromView(view) soundSpriteToggleButton = nil } override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { soundSpriteToggleButton.touchesBegan(touches.anyObject() as UITouch) } override func touchesMoved(touches: NSSet, withEvent event: UIEvent) { soundSpriteToggleButton.touchesMoved(touches.anyObject() as UITouch) } override func touchesEnded(touches: NSSet, withEvent event: UIEvent) { soundSpriteToggleButton.touchesEnded(touches.anyObject() as UITouch) } override func touchesCancelled(touches: NSSet, withEvent event: UIEvent) { soundSpriteToggleButton.touchesCancelled(touches.anyObject() as UITouch) } }
次回へつづく。ではでは。